package no.rmz.chez.game.reporters;

import java.util.Collection;
import java.util.Map;
import no.rmz.chez.game.Move;


/**
 * An utility class for reporting what is happening
 * inside a minimax player.
 */
abstract public  class MinimaxPlayerReporter {

    /**
     * Report on the result produced by a minimax player.
     *
     * @param millis  The number of milliseconds the player used
     *                to find the move.
     * @param goodness  The goodness of the actual move found.
     * @param result   The actual move found.
     * @param opportunities The total number of opportunities considered.
     * @param possibilities The actual possibilities considered.
     * @param capturingMovesConsidered The capturing moves considered.
     * @param discardedMaximizingMoves The discarded maximizing moves.
     * @param noOfEvaluations The number of evaluations performed.
     * @param maxDepth The depth of the minimax tree.
     */
    abstract public   void reportGetNextMoveStatistics(
            final long                millis,
            final double              goodness,
            final Move                result,
            final Collection<Move>    opportunities,
            final Collection<Move>    possibilities,
            final Map<Move,Double>    capturingMovesConsidered,
            final Map<Double, Collection<Move>> discardedMaximizingMoves, 
            final long noOfEvaluations, 
            final int maxDepth);
}
